package com.dianban.base;

import java.io.Serializable;
import java.text.MessageFormat;
import java.util.Map;

/**
 * 接口结构
 * 
 * 
 * 
 */
public class ResultVo implements Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = -5159428286666775049L;

	/**
	 * 类型
	 */
	public enum Type {

		/** 成功 */
		success,

		/** 警告 */
		warn,

		/** 错误 */
		error
	}

	/** 类型 */
	private Type type;

	/** 内容 */
	private Object content;

	/** 编码 */
	private String code;

	/** 描述 */
	private String desc;

	/**
	 * 初始化一个新创建的 Message 对象，使其表示一个空消息。
	 */
	public ResultVo() {

	}

	/**
	 * 初始化一个新创建的 Message 对象
	 *
	 *            类型
	 * @param content
	 *            内容
	 */
	public ResultVo(Type type,String code, String desc, Object content, Object... args) {
		this.type = type;
		this.code = code;
		this.desc = MessageFormat.format(desc, args);
		this.content = content;
	}

	/**
	 * 返回成功消息
	 */
	public static ResultVo success(Object content, Object... args) {
		return new ResultVo(Type.success,ResultCode.SUCESS.getCode(), ResultCode.SUCESS.getTitle(), content, args);
	}

	/**
	 * 返回失败消息
	 */
	public static ResultVo error(String code,String title, Object... args) {
		return new ResultVo(Type.error,code, title, "", args);
	}

	/**
	 * 返回失败消息
	 */
	public static ResultVo error(ResultCode resultCode, Object... args) {
		return new ResultVo(Type.error,resultCode.getCode(), resultCode.getTitle(), "", args);
	}

	public static ResultVo error(ResultCode resultCode, Map<String,Object> content, Object... args) {
		return new ResultVo(Type.error,resultCode.getCode(), resultCode.getTitle(), content, args);
	}

	public Type getType() {
		return type;
	}

	public void setType(Type type) {
		this.type = type;
	}

	public String getCode() {
		return code;
	}

	public void setCode(String code) {
		this.code = code;
	}

	public String getDesc() {
		return desc;
	}

	public void setDesc(String desc) {
		this.desc = desc;
	}

	/**
	 * 获取内容
	 * 
	 * @return 内容
	 */
	public Object getContent() {
		return content;
	}

	/**
	 * 设置内容
	 * 
	 * @param content
	 *            内容
	 */
	public void setContent(Object content) {
		this.content = content;
	}
	
	@Override
	public String toString() {
		if (content != null ){
			return content.toString();//MessageUtils.getMessage((String) content);
		}
		else {
			return "";
		}

	}
	
}